﻿using System;

namespace Creventive.Wpf.ShellFactory.Logging
{
    /// <summary>
    ///   Represents a logger tool
    /// </summary>
    public interface ILoggerService
    {
        /// <summary>
        ///   Sends the provided information to the logger.
        /// </summary>
        /// <param name = "format">The format.</param>
        /// <param name = "formatArguments">The format arguments.</param>
        void Info(string format, params object[] formatArguments);

        /// <summary>
        ///   Sends the provided information to the logger.
        /// </summary>
        /// <param name = "data">The data.</param>
        void Info(object data);

        /// <summary>
        ///   Sends the provided warning to the logger.
        /// </summary>
        /// <param name = "format">The format.</param>
        /// <param name = "formatArguments">The format arguments.</param>
        void Warning(string format, params object[] formatArguments);

        /// <summary>
        ///   Sends the provided warning to the logger.
        /// </summary>
        /// <param name = "data">The data.</param>
        void Warning(object data);

        /// <summary>
        ///   Sends the provided error to the logger.
        /// </summary>
        /// <param name = "format">The format.</param>
        /// <param name = "formatArguments">The format arguments.</param>
        void Error(string format, params object[] formatArguments);

        /// <summary>
        ///   Sends the provided error to the logger.
        /// </summary>
        /// <param name = "data">The data.</param>
        void Error(object data);

        /// <summary>
        ///   Sends the provided error to the logger.
        /// </summary>
        /// <param name = "exception">The exception.</param>
        void Error(Exception exception);

        /// <summary>
        ///   Sends the provided error to the logger.
        /// </summary>
        /// <param name = "exception">The exception.</param>
        /// <param name = "format">The format.</param>
        /// <param name = "formatArguments">The format arguments.</param>
        void Error(Exception exception, string format, params object[] formatArguments);

        /// <summary>
        ///   Sends the provided error to the logger.
        /// </summary>
        /// <param name = "exception">The exception.</param>
        /// <param name = "data">The data.</param>
        void Error(Exception exception, object data);
    }
}